06 ROS2 开发工具链使用

ROS2 开发工具链使用

关联:索引

colcon 是 ROS2 官方推荐的构建工具,核心作用是编译工作空间和功能包,替代了 ROS1 的 catkin_make。我们只需掌握 colcon build(编译)、colcon clean(清理)、colcon test(测试)三个核心命令,就能满足日常开发需求。

1. colcon build(核心编译命令)

作用:编译 ROS2 工作空间中的功能包,生成 build/install/log 目录。

核心参数与使用场景(记好这些,开发效率翻倍):

说明:

--symlink-install

是开发阶段必加参数!它使用符号链接安装 Python 脚本和配置文件。修改 Python 代码或配置文件后,无需重新编译,直接运行即可生效(C++ 代码仍需重新编译)。

例子:

colcon build --packages-select greensort_vision

(只编译视觉识别包)。

适用场景:新下载的功能包依赖未编译时,用此命令一键编译依赖和目标包。

关键提醒

2. colcon clean(清理编译产物命令)

作用:删除编译生成的 build/install/log 目录,解决编译缓存导致的报错问题。

核心用法

注意:colcon clean 命令需要安装扩展包 python3-colcon-clean。如果未安装,推荐直接使用 rm 命令手动删除。

适用场景

3. colcon test(测试命令)

作用:运行功能包中编写的测试用例(如单元测试、集成测试),验证功能包功能是否正常。

核心用法

适用场景

1. 分步操作(抄好指令,标清步骤)

  1. 步骤 0:环境配置(每次开新终端先做)

激活 ROS2 Humble 环境:

source /opt/ros/humble/setup.bash

检查:echo $ROS_DISTRO(输出 humble 才算对)

  1. 步骤 1:创建空工作空间(用于测试 colcon 命令)

指令:mkdir -p ~/colcon_test_ws/src

说明:创建名为 colcon_test_ws 的空工作空间,仅包含 src 目录。

  1. 步骤 2:进入工作空间根目录

指令:cd ~/colcon_test_ws

  1. 步骤 3:编译空工作空间(核心)

指令:colcon build --symlink-install

说明:编译后会生成 build/install/log 目录,验证空工作空间编译流程。

  1. 步骤 4:刷新环境变量(编译后必做)

指令:source install/setup.bash

说明:这一步非常重要!编译完成后必须 source 新生成的 setup.bash,否则系统找不到你刚编译的功能包。

  1. 步骤 5:清理编译产物

指令:colcon clean workspace

备选方案:若命令无效,可手动删除:rm -rf build install log

说明:清理后 build/install/log 目录会被删除,验证清理命令效果。

  1. 步骤 6:重新编译并测试(可选)

指令:colcon build --symlink-install && colcon test

说明:空工作空间无测试用例,重点演示命令组合使用方式。

2. 实操小规范(必记,避免报错)

  1. 快速回顾(举手回答):colcon build 的核心参数是什么?清理编译产物的通用命令是什么?编译工作空间前要进入哪个目录?

ros2 命令行是 ROS2 开发的 “万能工具”,能完成节点运行、话题查看、服务调用、消息发布等所有核心操作,替代了 ROS1 的 rostopic/rosnode 等零散命令,核心逻辑是 ros2 + 子命令 + 操作对象

1. 核心子命令分类(按功能记,不用背全)

子命令 作用 常用场景
ros2 run 运行功能包中的节点 启动项目中的核心节点
ros2 node 查看 / 管理节点(列表 / 信息) 排查节点启动失败、重复节点
ros2 topic 查看 / 发布话题(列表 / 消息 / 频率) 调试数据传输、验证消息发布
ros2 interface 查看消息/服务的数据结构接口定义 必学:发布消息前先查结构
ros2 service 查看 / 调用服务(列表 / 信息 / 调用) 调试服务通信、验证接口功能
ros2 log 查看节点运行日志 排查节点运行报错

2. 实操技巧(提升效率,必记)

3. 小海龟案例实操(核心演示)

场景:运行小海龟节点,通过命令行控制小海龟移动,验证 ros2 命令行用法。

  1. 步骤 1:启动小海龟节点(新开终端)

    # 别忘了设置 ROS_DOMAIN_ID
    source /opt/ros/humble/setup.bash
    ros2 run turtlesim turtlesim_node
    
  2. 步骤 2:查看节点信息(新开终端)

    ros2 node list  # 查看运行的节点(输出 /turtlesim)
    ros2 node info /turtlesim  # 查看节点的话题/服务信息
    
  3. 步骤 3:查看并发布话题(控制小海龟移动)

    ros2 topic list  # 查看话题(包含 /turtle1/cmd_vel)
    ros2 topic type /turtle1/cmd_vel  # 查看话题消息类型(geometry_msgs/msg/Twist)
    
    # 【新增步骤】查看消息结构,知道该发什么数据
    ros2 interface show geometry_msgs/msg/Twist
    # 输出包含:Vector3 linear 和 Vector3 angular
    
    # 发布速度指令,让小海龟直线移动
    ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
    
  4. 步骤 4:查看并调用服务(生成新海龟)

    ros2 service list  # 查看服务(包含 /spawn)
    ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.0, y: 5.0, theta: 0.0, name: 'turtle2'}"
    

4. 测试功能包实操(验证编译结果)

场景:创建测试功能包,编写简单节点,用 ros2 命令验证编译与运行结果。

  1. 步骤 1:创建测试功能包(进入 colcon_test_ws/src 目录)

    # 添加 --license 参数养成好习惯
    ros2 pkg create test_pkg --build-type ament_python --dependencies rclpy std_msgs --license Apache-2.0
    
  2. 步骤 2:编写简单发布节点(test_pkg/test_pkg/publisher_node.py)

    import rclpy
    from rclpy.node import Node
    from std_msgs.msg import String
    
    class TestPublisher(Node):
        def __init__(self):
            super().__init__('test_publisher_node')
            self.publisher_ = self.create_publisher(String, 'test_topic', 10)
            timer_period = 1.0
            self.timer = self.create_timer(timer_period, self.timer_callback)
            self.i = 0
    
        def timer_callback(self):
            msg = String()
            msg.data = f'Hello ROS2! {self.i}'
            self.publisher_.publish(msg)
            self.get_logger().info(f'Publishing: "{msg.data}"')
            self.i += 1
    
    def main(args=None):
        rclpy.init(args=args)
        test_publisher = TestPublisher()
        rclpy.spin(test_publisher)
        test_publisher.destroy_node()
        rclpy.shutdown()
    
    if __name__ == '__main__':
        main()
    
  3. 步骤 3:修改 setup.py(添加入口点,确保能运行节点)

打开 test_pkg/setup.py 文件,找到 entry_points 字段,在 console_scripts 的中括号内添加:

entry_points={
    'console_scripts': [
        'publisher_node = test_pkg.publisher_node:main', # 添加这一行
    ],
},
  1. 步骤 4:编译并运行节点,验证话题发布

    cd ~/colcon_test_ws && colcon build --packages-select test_pkg
    source install/setup.bash # 务必 source
    ros2 run test_pkg publisher_node  # 运行发布节点
    # 新开终端查看话题
    ros2 topic list  # 查看 test_topic 话题
    ros2 topic echo test_topic  # 查看话题发布的消息
    

1. 小组任务要求

结合你们小组的自选题项目,完成以下实操任务(填写实操任务表):

  1. 用 colcon 命令编译小组项目的功能包(优先用 --packages-select 参数)。
  2. 用 ros2 run 运行项目中的一个核心节点,用 ros2 node list/info 验证节点启动状态。
  3. ros2 topic list/echo 查看节点发布的话题及消息,用 ros2 service list 查看节点提供的服务。
  4. (可选)用 ros2 topic pub 发布测试消息,验证节点是否能正常接收;用 ros2 log 查看节点运行日志。
  5. 使用 AI 查询 2 个不熟悉的 ros2 命令(如 ros2 param/ros2 action),梳理其在小组项目中的应用场景。

2. 指导要点

  1. AI 查询示例:
  1. 核心技巧:
  1. 小知识:ROS2 命令行工具是工业级机器人开发的标配,不管是车企的自动驾驶项目,还是机器人企业的分拣 / 巡检项目,工程师都依赖命令行完成快速调试、批量验证,这是职业开发的核心技能。
  2. 职业习惯:高效使用开发工具(colcon/ros2 命令行)+ 借助 AI 提升效率,是现代机器人开发者的必备素养。规范的命令使用、清晰的实操思路,能让小组项目开发更高效,也能为未来进入产业界打下基础。
  3. 小鼓励:大家要熟练掌握这些工具,学会用 AI 解决问题,把工具变成 “提效神器”,让小组项目落地更顺畅。